home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / Fab Libraries / Independents.a < prev    next >
Text File  |  1994-01-05  |  1KB  |  92 lines

  1. * Did you know GetIndString is glue code (not a trap)?
  2. * The GetIndString glue is written very badly, so I wrote one
  3. * myself, and wrote a useful variant for loops.
  4.  
  5.     CASE    ON
  6.  
  7.     INCLUDE    'Traps.a'
  8.  
  9. ;StringPtr GetPtrIndHString(Handle resH, short index)
  10.  
  11. GetPtrIndHString    PROC    EXPORT
  12. resH            EQU    8
  13. index            EQU    14
  14.     LINK    A6,#0
  15.     MOVEQ    #0,D0
  16.     MOVEA.L    resH(A6),A0
  17.     MOVEA.L    (A0),A0
  18.     MOVEQ    #0,D1
  19.     MOVE.W    index(A6),D1
  20.     CMP.W    (A0)+,D1    ;number of strings
  21.     BHI.S    @err
  22.     BRA.S    @begin
  23. @loop
  24.     MOVE.B  (A0)+,D0
  25.     ADDA.L  D0,A0
  26. @begin
  27.     DBF     D1,@loop
  28.     MOVE.L    A0,D0
  29. @err
  30.     UNLK    A6
  31.     RTS
  32.  
  33.     ENDP
  34.  
  35. ;void GetIndHString(Str255 *dest, Handle resH, short index)
  36.  
  37. GetIndHString    PROC    EXPORT
  38. dest            EQU    8
  39. resH            EQU    12
  40. index            EQU    18
  41.     LINK    A6,#0
  42.     MOVEA.L    dest(A6),A1
  43.     MOVEA.L    resH(A6),A0
  44.     MOVEA.L    (A0),A0
  45.     MOVEQ    #0,D1
  46.     MOVEQ    #0,D0
  47.     MOVE.W    index(A6),D1
  48.     CMP.W    (A0)+,D1    ;number of strings
  49.     BHI.S    @err
  50.     BRA.S    @begin
  51. @loop
  52.     MOVE.B  (A0)+,D0
  53.     ADDA.L  D0,A0
  54. @begin
  55.     DBF     D1,@loop
  56.     MOVE.B    (A0),D0
  57.     ADDQ.B    #1,D0
  58.     _BlockMove
  59.     BRA.S    @end
  60. @err
  61.     CLR.W    (A1)
  62. @end
  63.     UNLK    A6
  64.     RTS
  65.  
  66.     ENDP
  67.  
  68. ;Boolean KeyState(short key)
  69.  
  70. KeyState    PROC    EXPORT
  71. mymap        EQU    -16
  72. key            EQU    10    ;MPW C
  73.     LINK    A6,#mymap
  74.     PEA        mymap(A6)
  75.     _GetKeys
  76.     MOVEQ    #0,D1
  77.     MOVE.W    key(A6),D1
  78.     MOVE.L    D1,D0
  79.     LSR.W    #3,D0        ;  D0 = key/8
  80.     ANDI.W    #7,D1        ;  D1 = key%8
  81.     
  82.     LEA        mymap(A6),A0
  83.     ADDA.W    D0,A0        ;  A0 = &KeyMap + key/8
  84.     BTST.B    D1,(A0)
  85.     SNE        D0
  86.     UNLK    A6
  87.     RTS
  88.  
  89.     ENDP
  90.  
  91.     END
  92.